;(function(){
  window.API = {};
  var hash = {};//hash表
  if(window.cefQuery){
    /**
     * 核心方法，调用该方法可以调用所有客户端方法
     * params:{
     *    method:'quote.getServerTime', // 必传
     *    sessionId:20012,  //必传,sessionId可以用API.createSessionId创建
     *    data: 参数,   //可选
     *    success:function(data){ //请求成功后的返回值
     *      console.log(data);//data即为所有请求的客户端方法值
     *    },
     *    error:function(data){ //请求失败后返回值
     *      console.log(data);  
     *    },
     *    persistent:false, //可选参数,是否持续请求，默认否，一般为true的都是registerPush这一类推送
     *    timeout:30000//可选参数,超时时间，默认30s，
     * 
     * }
     */
    API.use = function(params){
      var persistent =  params.persistent || false;
      
      
      if (params.data &&　Object.prototype.toString.call(params.data) != '[object Array]'){
          params.data = [params.data];//统一转化为数组进行处理
      }
      var request = {
              v:params.version || "v1.0",
              method:params.method,
              params:params.data,
              sessionId:params.sessionId
      };
      
      var timeoutTimer = null,requestid;
      if (!persistent){
        timeoutTimer = setTimeout(function(){
          window.cefQueryCancel(requestid);
          console.log('timeout'+params.method+'params:'+params.data);
        },params.timeout || 30000);

      }
      requestid = window.cefQuery({
        request:JSON.stringify(request),
        persistent:persistent,
        onSuccess:function(response){
          if(timeoutTimer){
            clearTimeout(timeoutTimer);
          }
          if(params.success){
              params.success(response);
              return;
          }
        },
        onFailure:function(error_code,error_message){
          if(timeoutTimer){
            clearTimeout(timeoutTimer);
          }
          if(params.error){
            params.error(error_code,error_message);
            return;
          }
          console.log("接口调用失败:error_code:"+error_code+";error_message:"+error_message);
        }
      });
    };
    /**
     * 创建SessionID，表示唯一
     * 
     */
    API.createSessionId = function(name){
      return window.cefNewSession(name).sessionId;
    };
    // API.useChrome = async function(params){
    //   return new Promise(function(resolve,reject){
    //     params.success = resolve;
    //     API.use(params);
    //   });
    //}
  }else if(isIE()){

    API.use = function(params){
      var method = params.method.split('.')[1];
      var obj = params.sessionId;
      var result;
      if(params.data !== undefined && params.data !== '' ){
          result = obj[method](params.data);
      }else{
          result = obj[method]();
      }
      params.success(result);
    };
    API.createSessionId = function(name){
      if(name == 'external'){
        return external;
      }
      return external.createObject(name);
    };
  }
  /**
   * [isIE 判断是否是IE浏览器]
   * @return {Boolean} [true:是,false:否]
   */
  function isIE() {
      if (!!window.ActiveXObject || 'ActiveXObject' in window) {
          return true;
      } else {
          return false;
      }
  }

})();
